//
//  WBStatusViewModel.swift
//  WeiBo
//
//  Created by 韩菲菲 on 16/8/13.
//  Copyright © 2016年 韩菲菲. All rights reserved.
//

import UIKit

//这个是用来管理Model的
class WBStatusViewModel: NSObject {
    
    //创建模型属性
    var statusModel:WBStatusListModel?
    
    //创建会员图片属性
    var membershipImage: UIImage?
    
    //创建认证图片属性
    var avatarImage: UIImage?
    
    //微博来源
    var sourceString: String?
    
    //	转发数
    var repostsStr: String?
    //  评论数
    var commentsStr: String?
    //  表态数
    var attitudesStr: String?
    
    //原创微博的正文
    var orginalAttr: NSMutableAttributedString?
    
    //转发微博的正文
    var retweetAttr: NSMutableAttributedString?
    
    //微博时间 计算性属性
    var sinaCreatTimeStr: String?{
        
        return NSDate.getSinaDateWithString(statusModel?.created_at ?? "").handleSinaTimeStr
        
    }
    
    init(status:WBStatusListModel) {
        super.init()
        
        self.statusModel = status
        
        self.membershipImage = selectedMembershipImageView(status.user?.mbrank ?? 0)
        
        self.avatarImage = selectedavatarImageView(status.user?.verified ?? -1)
        
        self.sourceString = subStringWithSource(statusModel?.source ?? "")
        
        self.repostsStr = setupButton(statusModel?.reposts_count ?? 0 ,title: "转发")
        self.commentsStr = setupButton(statusModel?.comments_count ?? 0 ,title: "评论")
        self.attitudesStr = setupButton(statusModel?.attitudes_count ?? 0 ,title: "赞")
        
        self.orginalAttr = dealSinaContent(statusModel?.text ?? "")
        
        self.retweetAttr = dealSinaContent(statusModel?.retweeted_status?.text ?? "")
        
    }
    
    
}

//原创微博图文混排
extension WBStatusViewModel{
    
    // MARK: - 处理首页数据信息
    func dealSinaContent(text:String) -> NSMutableAttributedString {
        
        //把当前字符串转变成可变的富文本
        let attrM = NSMutableAttributedString(string: text)
        
        let regex = "\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]"
        
        //创建可变数组
        var matchModels:[WBMatchModel] = [WBMatchModel]()
        
        //利用正则找出指定内容
        (text as NSString).enumerateStringsMatchedByRegex(regex) { (count, result, range, _) in
            
            //创建模型
            let matchModel = WBMatchModel(chs: result.memory as! String, range: range.memory)
            
            //添加到可变数组中
            matchModels.append(matchModel)
            
        }
        
        //倒序遍历数组
        for matchModel in matchModels.reverse(){
            
            //根据字符串去数组中寻找
            guard let model = WBEmoticonTool.sharedEmoticonTool.searchEmoticonModelWithChsString(matchModel.chs ?? "") else{
                
                continue
                
            }
            
            let attr =  NSAttributedString.getAttributedStringWithEmoticonModel(model, textSize: 15, y: -4, type: .NSTextType)
            //替换
            attrM.replaceCharactersInRange(matchModel.range, withAttributedString: attr)
            
            
        }
        
        
        
        return attrM
    }
    
}

//处理微博时间格式
extension WBStatusViewModel{
    
    //处理服务器返回来的时间格式 “Mon Aug 15 13:38:44 +0800 2016”
    func handleSinaTimeStr(created_at:String) -> String{
        
        let formatter = NSDateFormatter()
        
        //设置格式化格式
        formatter.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
        
        //本地化
        formatter.locale = NSLocale(localeIdentifier: "en_US");
        
        //微博时间
        let sinaDate = formatter.dateFromString(created_at)!
        
        //调用方法判断是不是今年
        let isThisYear = sinaIsThisYear(sinaDate)
        
        //判断
        if isThisYear{
            //是今年
            //创建日历对象
            let calendar = NSCalendar.currentCalendar()
            //判断是不是今天
            if calendar.isDateInToday(sinaDate){
                //是今天
                //求差值
                let s = Int(NSDate().timeIntervalSinceDate(sinaDate))
                
                //如果小于60 显示 刚刚
                if s < 60 {
                    return "刚刚"
                }else if s >= 60 && s < 3600{
                    
                    //如果大于等于60 && 小于3600  显示 xx分钟前
                    return "\(s/60)分钟前"
                }else{
                    //- 其他   显示  xx小时前
                    return "\(s/3600)小时前"
                }
                
            }else if calendar.isDateInYesterday(sinaDate)
            {
                //昨天 2016年08月14日 20:20:20  显示   昨天 20:20
                formatter.dateFormat = "昨天 HH:mm"
            }else
            {
                //不是昨天 2016年06月14日 20:20:20  显示    06月14日 20:20
                formatter.dateFormat = "MM月dd日 HH:mm"
            }
            
        }else{
            //不是今年
            //重新设置dataformatter格式
            //2014年06月14日 20:20
            formatter.dateFormat = "yyyy年MM月dd日 HH:mm"
        }
        
        return formatter.stringFromDate(sinaDate)
    }
    
    //提供个方法 判断是不是今年
    func sinaIsThisYear(sinaDate: NSDate) -> Bool{
        
        //创建格式化时间对象
        let formatter = NSDateFormatter()
        
        //设置格式
        formatter.dateFormat = "yyyy"
        
        //取出sina时间里面的年
        let sinaStr = formatter.stringFromDate(sinaDate)
        
        //取出今年的年
        let thisYearStr = formatter.stringFromDate(NSDate())
        
        //判断两个字符串是不是相等
        //如果相等  就说明是今年 如果不相等 说明不是今年
        return sinaStr == thisYearStr
        
    }
    
    
    
}


//评论转发赞的数据
extension WBStatusViewModel{
    
    //提供给按钮赋值的方法 给一个数据 返回一个字符串
    func setupButton(count: Int , title: String) -> String {
        
        if count <= 0 {
            
            return title
        }else if count < 10000{
            
            return "\(count)"
        }else
        {
            let c = CGFloat(count/1000)/10
            
            var string = "\(c)万"
            
            if string.containsString(".0万") {
                string = string.stringByReplacingOccurrencesOfString(".0万", withString: "万")
                
            }
            
            return string
        }
    }
    
    
}


extension WBStatusViewModel{
    
    //截取来源字符串
    func subStringWithSource(source:String)->String {
        
        if source.containsString("\">") {
            
            let startRange = source.rangeOfString("\">")!
            let endRange = source.rangeOfString("</")!
            
            let result = source.substringWithRange(startRange.endIndex..<endRange.startIndex)
            return "来自 \(result)"
        }
        
        return "来自 那遥远的地方"
        
    }
    
    
}



extension WBStatusViewModel{
    
    
    //根据会员等级设置会员图片
    func selectedMembershipImageView(mbrank: Int)->UIImage?{
        
        
        
        if mbrank > 0 && mbrank < 7{
            
            return UIImage(named: "common_icon_membership_level\(mbrank)")
            
        }else
        {
            return UIImage(named: "common_icon_membership_expired")
            
        }
    }
    
    // 处理微博用户认证image/// 认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    func selectedavatarImageView(verified: Int) -> UIImage?{
        
        
        switch verified{
            
        case 1:
            return UIImage(named: "avatar_vip")
        case 2,3,5:
            return UIImage(named: "avatar_enterprise_vip")
        case 220:
            return UIImage(named: "avatar_grassroot")
        default:
            return UIImage(named: "avatar_vgirl")
        }
        
    }
    
    
}